package com.shujia.day02;

public class Code10WeiYunSuan {
    public static void main(String[] args) {
        /*
            <<: 将数据的补码左移n位，右边缺失的用0补齐，左边多的直接丢弃，左移就是对当前值 乘以 2的n次方
            >>: 将数据的补码右移n位，右边多出的直接丢弃，左边最高位是0那么就用0补齐，否则用1进行补齐，就是对当前值除以2的n次方
            >>>:将数据的补码右移n位，右边多出的直接丢弃，左边直接用0进行补齐
         */

        int a = 6;
        System.out.println(a << 2); // 左移2位
        System.out.println(a >> 2); // 右移2位
        System.out.println(a >>> 2); // 无符号右移2位

        /*
            位运算是对补码进行计算
            6 =>     00000000 00000000 00000000 00000110 (补码)
          a << 2 (00)00000000 00000000 00000000 00011000 (补码) => 原码一样 结果值为 24
          a >> 2     00000000 00000000 00000000 00000001(10) => 原码一样  结果值为 1
          a >>> 2    00000000 00000000 00000000 00000001(10) => 原码一样  结果值为 1

         */

        System.out.println(4<<3);
        System.out.println(-4<<2);
        System.out.println(12>>2);
        System.out.println(32>>3);
        System.out.println(-12>>2);
        System.out.println(-4>>>2); // 1073741823

        /*
            -4  10000000 00000000 00000000 00000100(原码)  => 1 1111111 11111111 11111111 11111011(反码) => 1 1111111 11111111 11111111 11111100 (补码)

             00111111 11111111 11111111 11111111(00)(补码/原码) =>  1073741823

         */

    }
}
